Como reinstalar GRUB despues de que se haya daniado o borrado por alguna actualizacion o al instalar algun sistema secundario
En mi caso esta deberia de ser las opciones de arranque que me da mi ordenador:
Pero la que se me muestra en este momento es esta:
En mi caso se ha perdido el arranque del GRUB (Concretamente es la opcion de opensuse), como se puede ver todavia se mantiene el arranque de windows, pero me es imposible acceder a mi sistema linux
INFO: Esta situacion se dio despues de cambiar el SSD del ordenador para usar un sistema que tenia en un SSD antiguo, creo que lo que ocurrio en esta situacion fue algo relacionado con las variables UEFI ya que el sistema antiguo era una instalacion con MBR no UEFI, al arrancar con ese sistema creo que a pesar de que no se realizo ningun cambio en el SSD nuevo se debio de actualizar algun valor en el sistema UEFI de la placa base dejando el GRUB fuera de la lista de arranque al meter otra vez el SSD nuevo, lo que me obliga a tener que instalar el GRUB de nuevo
Para reinstalar el GRUB usaremos un sistema LIVE desde un USB, tendremos que grabarlo en un USB desde otro sistema que tengamos disponible o siempre es bueno tener uno por ahi de repuesto por si pasan estas cosas.
En este caso voy a usar la imagen de instalacion de Opensuse que nos permite arrancar con un modo de recuperacion (Solo es una interfaz de consola que nos permite ejecutar los comandos basicos para llevar a cabo tareas de recuperacion como la reinstalacion de grub).
En el momento de seleccionar el arranque vemos lo siguiente:
Tenemos dos opciones para arrancar el sistema que tengo grabado en el USB, una es UEFI y la otra no
Esto es importante, si el sistema en el que teniamos instalado el GRUB era un sistema con arranque UEFI tendremos que cargar nuestro sistema de recuperacion con arranque UEFI, si no no podremos llevar a cabo la reinstalacion del GRUB
Para saber si el sistema tenia arranque UEFI o no lo que hacemos es iniciar nuestro sistema de recuperacion (da igual el UEFI que el MBR), una vez estemos dentro ejecutamos el siguiente comando:
# fdisk -l /dev/sda

NOTA: En mi caso el disco es el sda, si no sabes cual es el disco puedes lanzar solo fdisk -l (sin mas argumentos) para consultar todos los dispositivos de almacenamiento del sistema y saber cual es en el que esta instalado el sistema en el que quieres reinstalar el grub, hay que tener en cuenta que se listaran muchos dispositivos de almacenamientos virtuales al ser un sistema LIVE
Como se puede ver en la imagen la primera particion es una particion EFI, por lo tanto el sistema tenia arranque UEFI, asi que necesitaremos arrancar con un sistema UEFI, si ya lo habiamos hecho perfecto si no, pues tendremos que reiniciar y seleccionar el sistema UEFI en el menu de arranque
Para esto desde la consola lanzamos el siguiente comando:
# efibootmgr
Si el sistema ha arrancado con UEFI se muestra un resultado como este:
Si el sistema no ha arrancado con UEFI veremos un mensaje como el siguiente:
Ahora que lo tenemos todo preparado ya podemos proceder a realizar la reinstalacion de GRUB
Primero tenemos que montar el sistema donde estaba instalado GRUB, para saber cual es la particion exacta podemos usar fdisk:
# fdisk -l /dev/sda

En mi caso /dev/sda6 es la particion donde esta instalado mi sistema linux y por lo tanto donde tenemos que realizar la instalacion de GRUB, si tenemos dudas de cual es la particion podemos montarla y navegar por los archivos para confirmar que es la particion correcta
A continuacion montamos la particion en una carpeta:
# mount /dev/sda6 /mnt/linux

Ahora tenemos que montar los sistemas de archivos virtuales (dev, proc, sys) del sistema LIVE que estamos ejecutando dentro de la particion que acabamos de montar, si no no podremos instalar grub (mas adelante se muestran posibles errores si no se hace este paso):
# mount --bind /dev /mnt/linux/dev
# mount --bind /proc /mnt/linux/proc
# mount --bind /sys /mnt/linux/sys

Ahora hacemos que la particion montada sea la raiz:
# chroot /mnt/linux

Como el sistema que estamos recuperando tiene arranque UEFI tendremos que montar tambien la particion EFI (en mi caso es /dev/sda1), en este caso como ya tenemos montados todos los sistemas virtuales y cambiado la raiz podemos hacerlo simeplemnte con:
# mount /dev/sda1
En esta situacion mount leera la tabla de montaje del sistema (fstab) y montara la particion EFI donde corresponde (en este caso la ruta de montaje es /boot/efi dentro del sistema en si)
De todos modos si queremos hacerlo indicando directamente la ruta incluso antes de hacer el chroot podemos hacerlo tal que asi:
# mount /dev/sda1 /mnt/linux/boot/efi
Y para terminar instalamos el GRUB:
# grub2-install /dev/sda

Llegados a este punto GRUB deberia de estar instalado correctamente, solo tendriamos que reiniciar el sistema y GRUB deberia de cargarse de manera correcta.
Si tuviesemos algun problema con la configuracion del GRUB, o si GRUB se iniciase pero no se mostrase algun sistema que si que esta instalado en el sistema, podemos generar un nuevo archivo de configuracion de la siguiente manera:
# grub2-mkconfig -o /boot/grub/grub.cfg
Si nos aparece este error es porque no hemos montado los sistemas de archivos virtuales
Solucion:
# mount --bind /dev /mnt/linux/dev
# mount --bind /proc /mnt/linux/proc
# mount --bind /sys /mnt/linux/sys
Este error aparece si no tenemos montada la particion EFI
Solucion:Si ya tenemos hecho el chroot y todas los sistemas de archivos virtuales montados podemos solucionarlo asi (ya que mount leera en el archivo fstab donde tiene que ir montada la particion):
# mount /dev/sda1
Si no, podemos indicar exactamente donde queremos montar la particion
# mount /dev/sda1 /mnt/linux/boot/efi
El sistema desde el que se esta intentando instalar GRUB no ha sido arrancado usando UEFI
Solucion:Tenemos que arrancar con otro sistema que arranque usando UEFI, igual otra opcion de arranque del sistema de recuperacion o un sistema LIVE distinto.
GRUB | FIX | reparar | UEFI | MBR | boot